<?php
/**
 *  参数配置表
 * ds
 * 2020.08.13
 */

namespace App\Models\MainDB;

use App\Services\Tools\RedisService;
use Illuminate\Database\Eloquent\Model;

class Config extends Model {

    protected $table = 'ln_config';     //数据库内完整表名

    protected $primaryKey = 'id';    //主键名

    protected $fillable = [
        'id',             // 主键id
        'key',            //  配置名称
        'type',           //  配置类型
        'group',          //  配置分组
        'extra',          //  配置值
        'name',           //   配置标题
        'desc',           // 配置说明
        'status',         // 状态 0启用 1禁用
        'value',          // 配置值
        'sort',           // 排序值
    ];

    public $timestamps = false;

    public function getValue($key) {
        $all_config = json_decode($this->getAllConfig(), true);
        return $all_config[$key] ?? '';
    }

    public function getAllConfig() {
        $config = RedisService::getConfig();
        if (!$config) {
            $config = $this->where(['status' => 0])->get()->keyBy('key')->map(function ($item) {
                if ($item->type == 4) {
                    $temp_value = trim($item->value, ",;\r\n");
                    if ($temp_value) {
                        $array = preg_split('/[,;\r\n]+/', $temp_value);
                    } else {
                        $array = [];
                    }
                    if (strpos($item->value, ':')) {
                        $value = [];
                        foreach ($array as $val) {
                            [$k, $v] = explode(':', $val);
                            $value[$k] = $v;
                        }
                    } else {
                        $value = $array;
                    }
                    $item->value = $value;
                }
                return $item->value;
            })->toJson();
            RedisService::setConfig($config);
        }
        return $config;
    }
    /**
     * 根据配置类型解析配置
     */
    public function parse(){
        $type = $this->getAttribute("type");
        $value = $this->getAttribute("value");
        switch ($type) {
            case 4: //解析数组
                $temp_value = trim($value, ",;\r\n");
                if ($temp_value) {
                    $array = preg_split('/[,;\r\n]+/', $temp_value);
                } else {
                    $array = [];
                }
                if(strpos($value,':')){
                    $value  = array();
                    foreach ($array as $val) {
                        list($k, $v) = explode(':', $val);
                        $value[$k]   = $v;
                    }
                }else{
                    $value =    $array;
                }
                break;
        }
        return $value;
    }
}
